cmake_minimum_required(VERSION 3.5)

project(DetectionDescription VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS SerialPort)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Network)

include_directories(D:/HIT/jakaAPI_V2.1.11_stable_20240507091715A053/SDK2.1.11/Windows/c&c++/inc_of_c++)
link_directories(D:/HIT/jakaAPI_V2.1.11_stable_20240507091715A053/SDK2.1.11/Windows/c&c++/x64)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(DetectionDescription
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
        delay.cpp
        delay.cpp delay.h
        description.cpp description.h
        device.cpp device.h
        ethernet.cpp ethernet.h
        ledcontroller.h
        main.cpp mainwindow.cpp mainwindow.h mainwindow.ui
        movejoint.cpp movejoint.h
        objectfactory.cpp objectfactory.h
        operation.cpp operation.h
        rs232.cpp rs232.h
        snap.cpp snap.h
        step.cpp step.h
        wordopcontrolled.cpp wordopcontrolled.h
        newdevicedialog.h newdevicedialog.cpp newdevicedialog.ui
        newoperationdialog.h newoperationdialog.cpp newoperationdialog.ui
        recognize.h recognize.cpp
        jakarobot.h jakarobot.cpp
        TCPClient.h
        TCPClient.cpp
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET DetectionDescription APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(DetectionDescription SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(DetectionDescription
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(DetectionDescription PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(DetectionDescription PRIVATE Qt${QT_VERSION_MAJOR}::Network)
target_link_libraries(DetectionDescription PRIVATE Qt${QT_VERSION_MAJOR}::SerialPort jakaAPI)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.DetectionDescription)
endif()
set_target_properties(DetectionDescription PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS DetectionDescription
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(DetectionDescription)
endif()
